题意:夜空可以表示为一份天体图,它是一个由字符$0$和$1$组成的二维矩阵,字符$1$表示所在的位置有一颗星;字符$0$表示该位置上是空的.给定一份天体图,用同一个小写英文标识相似的所有星座。相似的星座必须用相同的字母标识,不同的星座表示为不同的字母。标识一个星座,就是将其中各星体对应的字符1替换为相应的小写字母.
难点在于判断图像是否相似,我们采用将每个点之间互相连起来,计算每个点与点之间的距离之和(也可用$hash$、直接写对称旋转函数或八个循环判断),共$\frac{n*(n-1)}{2}$条线段,这种做法的正确性不难证明,当和相同时,每条边长度相等(正确性下面再证),可以将图像看成一个多边形,连接点可以看成将多边形分成许多三角形,根据三角形全等判定条件($sss$),可以判定每个三角形全等,根据三角形全等推出对应边相等、对应角相等,可证多边形全等
当和相等,每条边也相等的证明:三角形将每个格点的边长设为$1$,故每条线段的长度都为整数或一个整数的开方,整数的小数部分为$0$,整数的开根小数部分取值十分有限,使用$long double$可以将出错率大大降低。
1 |
|